﻿<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>A_HotkeyModifierTimeout - 语法 &amp; 使用 | AutoHotkey v2</title>
<meta name="description" content="The A_HotkeyModifierTimeout variable affects the behavior of the Send function with the hotkey modifiers CTRL, ALT, WIN, and SHIFT." />
<meta name="ahk:equiv-v1" content="lib/_HotkeyModifierTimeout.htm" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
</head>
<body>

<h1>A_HotkeyModifierTimeout</h1>

<p>影响带以下<a href="../Hotkeys.htm">热键</a>修饰符的 <a href="Send.htm">Send</a> 的行为: <kbd>Ctrl</kbd>, <kbd>Alt</kbd>, <kbd>Win</kbd> 和 <kbd>Shift</kbd>.</p>

<p>内置变量 <strong>A_HotkeyModifierTimeout</strong> 定义了热键被按下后, 其修饰符键被认为仍然被按住的时间. 这被 <a href="Send.htm">Send</a> 用来决定在暂时释放修饰符键后是否再按下它们.</p>
<dl>
  <dt>Value</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#numbers">整数</a></p>
    <p>间隔的长度, 以毫秒为单位. 该值可以是 -1, 这样它就永远不会超时(修饰符键总是在 Send 后被再次按下), 或 0 这样它总是超时(修改键永远不会被再次按下).</p>
    <p>默认值为 50.</p>
  </dd>
</dl>

<h2 id="Remarks">备注</h2>
<p>此变量在以下情况下无效:</p>
<ul>
  <li>热键通过 <a href="Send.htm#SendInput">SendInput</a> 或 <a href="Send.htm#SendPlay">SendPlay</a> 方法发送键击. 这是因为这些方法将用户的物理按键操作和释放延迟到 Send 完成之后.</li>
  <li>脚本已经安装了键盘钩子(您可以通过主窗口中的 "View-&gt;Key history" 菜单项或 <a href="KeyHistory.htm">KeyHistory</a> 函数来判断你的脚本是否使用了钩子). 这是因为钩子可以跟踪用户实际按住的修饰键(<kbd>Alt</kbd>/<kbd>Ctrl</kbd>/<kbd>Win</kbd>/<kbd>Shift</kbd>), 不需要使用超时.</li>
</ul>
<p>为了说明此指令的效果, 请参考这个例子: <code>^!a::Send "abc"</code>.</p>
<p>执行 <a href="Send.htm">Send</a> 函数时, 它会首先释放 <kbd>Ctrl</kbd> 和 <kbd>Alt</kbd>, 以便正确发送字符. 在发送所有键击后, 此函数不知道它是否可以安全的推回 <kbd>Ctrl</kbd> 和 <kbd>Alt</kbd> 到按下状态(以匹配用户是否仍然按下它们). 但是, 如果经过的时间少于指定的毫秒数, 则将假定用户尚未有释放键的机会, 因此它将推回它们以使其符合其物理状态. 否则, 修饰键将不会被推回按下状态, 用户必须再次按下它们来修饰同一个或其他的按键.</p>
<p>超时值应设置为小于用户通常在释放热键的修饰键之前按住它们的时间. 否则, 即使用户没有实际按下修饰键, 修饰键也可能恢复到向下位置(保持按下).</p>
<p>在下列情况中您可以减少或不使用此变量:</p>
<ul>
  <li>通过调用 <a href="InstallKeybdHook.htm">InstallKeybdHook</a> 安装键盘钩子.</li>
  <li>使用 <a href="Send.htm#SendInput">SendInput</a> 或 <a href="Send.htm#SendPlay">SendPlay</a> 方法而不使用传统的 <a href="Send.htm#SendEvent">SendEvent</a> 方法.</li>
  <li>使用传统的 <a href="Send.htm#SendEvent">SendEvent</a> 方法, 将 <a href="SetKeyDelay.htm">SetKeyDelay</a> 减少到 0 或 -1, 这应该会有所帮助, 因为它可以更快地发送击键.</li>
</ul>

<h2 id="Related">相关</h2>
<p><a href="GetKeyState.htm">GetKeyState</a></p>

<h2 id="Examples">示例</h2>
<div class="ex" id="ExBasic">
<p><a class="ex_number" href="#ExBasic"></a> 将热键修饰符超时设置为 100 毫秒, 而不是 50 毫秒.</p>
<pre>A_HotkeyModifierTimeout := 100</pre>
</div>

</body>
</html>